WebAssembly์ ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ์ต์ ํ์ ๋ํ ์ข ํฉ ๊ฐ์ด๋. ๋ค์ํ ํ๋ซํผ๊ณผ ๋ธ๋ผ์ฐ์ ์์ ์ต๊ณ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ธฐ ์ํ ์ ๋ต, ๊ธฐ์ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ค์ ์ ์ผ๋ก ๋ค๋ฃน๋๋ค.
WebAssembly GC ์ฑ๋ฅ ํ๋: ๊ฐ๋น์ง ์ปฌ๋ ์ ์ต์ ํ ๋ง์คํฐํ๊ธฐ
WebAssembly(WASM)๋ ๋ธ๋ผ์ฐ์ ์์ ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์น ๊ฐ๋ฐ์ ํ๋ช ์ ์ผ์ผ์ผฐ์ต๋๋ค. ๊ฐ๋น์ง ์ปฌ๋ ์ (GC) ์ง์์ด ๋์ ๋๋ฉด์ WASM์ ๋์ฑ ๊ฐ๋ ฅํด์ง๊ณ ์์ผ๋ฉฐ, ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ๊ธฐ์กด ์ฝ๋๋ฒ ์ด์ค์ ์ด์์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๊ทธ๋ฌ๋ GC์ ์์กดํ๋ ๋ค๋ฅธ ๊ธฐ์ ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ต์ ์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ค๋ฉด GC์ ์๋ ๋ฐฉ์๊ณผ ํจ๊ณผ์ ์ธ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ๊น์ ์ดํด๊ฐ ํ์ํฉ๋๋ค. ์ด ๊ธ์ ๋ค์ํ ํ๋ซํผ๊ณผ ๋ธ๋ผ์ฐ์ ์ ์ ์ฉํ ์ ์๋ ์ ๋ต, ๊ธฐ์ , ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ค๋ฃจ๋ WebAssembly GC ์ฑ๋ฅ ํ๋์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
WebAssembly GC ์ดํดํ๊ธฐ
์ต์ ํ ๊ธฐ๋ฒ์ ์ดํด๋ณด๊ธฐ ์ ์ WebAssembly GC์ ๊ธฐ๋ณธ ์ฌํญ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํ C๋ C++ ๊ฐ์ ์ธ์ด์ ๋ฌ๋ฆฌ, JavaScript, C#, Kotlin ๋ฑ GC๋ฅผ ์ง์ํ๋ WASM์ ๋์์ผ๋ก ํ๋ ์ธ์ด๋ ๋ฐํ์์ด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ๋ฅผ ๊ด๋ฆฌํ๋๋ก ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฐ๋ฐ์ ๋จ์ํํ๊ณ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐ ๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฒ๊ทธ์ ์ํ์ ์ค์ฌ์ค๋๋ค. ๊ทธ๋ฌ๋ GC์ ์๋์ ์ธ ํน์ฑ์๋ ๋น์ฉ์ด ๋ฐ๋ฆ ๋๋ค. GC ์ฃผ๊ธฐ๋ ์ฌ๋ฐ๋ฅด๊ฒ ๊ด๋ฆฌ๋์ง ์์ผ๋ฉด ์ผ์ ์ค์ง๋ฅผ ์ ๋ฐํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค.
ํต์ฌ ๊ฐ๋
- ํ(Heap): ๊ฐ์ฒด๊ฐ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋๋ค. WebAssembly GC์์๋ ๋ค๋ฅธ WASM ๋ฐ์ดํฐ์ ์ฌ์ฉ๋๋ ์ ํ ๋ฉ๋ชจ๋ฆฌ์๋ ๊ตฌ๋ณ๋๋ ๊ด๋ฆฌํ ํ์ ๋๋ค.
- ๊ฐ๋น์ง ์ปฌ๋ ํฐ(Garbage Collector): ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๊ณ ํ์ํ๋ ์ญํ ์ ํ๋ ๋ฐํ์ ๊ตฌ์ฑ ์์์ ๋๋ค. ๋ค์ํ GC ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ๋ฉฐ ๊ฐ๊ฐ ๊ณ ์ ํ ์ฑ๋ฅ ํน์ฑ์ ๊ฐ์ง๋๋ค.
- GC ์ฃผ๊ธฐ(GC Cycle): ์ฌ์ฉ๋์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ณํ๊ณ ํ์ํ๋ ๊ณผ์ ์ ๋๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ด์์๋ ๊ฐ์ฒด(์์ง ์ฌ์ฉ ์ค์ธ ๊ฐ์ฒด)๋ฅผ ํ์(mark)ํ ๋ค์ ๋๋จธ์ง๋ฅผ ์ธ์ด๋ด๋(sweep) ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค.
- ์ค๋จ ์๊ฐ(Pause Time): GC ์ฃผ๊ธฐ๊ฐ ์คํ๋๋ ๋์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ค๋จ๋๋ ์๊ฐ์ ๋๋ค. ์ค๋จ ์๊ฐ์ ์ค์ด๋ ๊ฒ์ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ฑ ์ข์ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ๋ฐ ๋งค์ฐ ์ค์ํฉ๋๋ค.
- ์ฒ๋ฆฌ๋(Throughput): ์ ํ๋ฆฌ์ผ์ด์ ์ด GC์ ์์๋๋ ์๊ฐ ๋๋น ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐ ์์๋๋ ์๊ฐ์ ๋น์จ์ ๋๋ค. ์ฒ๋ฆฌ๋์ ๊ทน๋ํํ๋ ๊ฒ ๋ํ GC ์ต์ ํ์ ํต์ฌ ๋ชฉํ์ ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋(Memory Footprint): ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋นํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ๋๋ค. ํจ์จ์ ์ธ GC๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์์คํ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
GC ์ฑ๋ฅ ๋ณ๋ชฉ ํ์ ์๋ณํ๊ธฐ
WebAssembly GC ์ฑ๋ฅ ์ต์ ํ์ ์ฒซ ๋จ๊ณ๋ ์ ์ฌ์ ์ธ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ ๊ฒ์ ๋๋ค. ์ด๋ฅผ ์ํด์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ GC ๋์์ ๋ํ ์ ์คํ ํ๋กํ์ผ๋ง ๋ฐ ๋ถ์์ด ํ์ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ฌ๋ฌ ๋๊ตฌ์ ๊ธฐ์ ์ด ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ
์ต์ ๋ธ๋ผ์ฐ์ ๋ GC ํ๋์ ๋ชจ๋ํฐ๋งํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ํ๋ฅญํ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค. Chrome, Firefox, Edge์ ์ฑ๋ฅ ํญ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์คํ ํ์๋ผ์ธ์ ๊ธฐ๋กํ๊ณ GC ์ฃผ๊ธฐ๋ฅผ ์๊ฐํํ ์ ์์ต๋๋ค. ๊ธด ์ค๋จ ์๊ฐ, ๋น๋ฒํ GC ์ฃผ๊ธฐ ๋๋ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ฐพ์๋ณด์ธ์.
์์: Chrome ๊ฐ๋ฐ์ ๋๊ตฌ์์ ์ฑ๋ฅ ํญ์ ์ฌ์ฉํ์ธ์. ์ ํ๋ฆฌ์ผ์ด์ ์คํ ์ธ์ ์ ๊ธฐ๋กํฉ๋๋ค. "๋ฉ๋ชจ๋ฆฌ" ๊ทธ๋ํ๋ฅผ ๋ถ์ํ์ฌ ํ ํฌ๊ธฐ์ GC ์ด๋ฒคํธ๋ฅผ ํ์ธํ์ธ์. "JS ํ"์ ๊ธด ์คํ์ดํฌ๋ ์ ์ฌ์ ์ธ GC ๋ฌธ์ ๋ฅผ ๋ํ๋ ๋๋ค. "ํ์ด๋ฐ" ์๋์ "๊ฐ๋น์ง ์ปฌ๋ ์ " ์น์ ์ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ GC ์ฃผ๊ธฐ ์๊ฐ์ ๊ฒํ ํ ์๋ ์์ต๋๋ค.
Wasm ํ๋กํ์ผ๋ฌ
ํนํ๋ WASM ํ๋กํ์ผ๋ฌ๋ WASM ๋ชจ๋ ์์ฒด ๋ด์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ GC ๋์์ ๋ํ ๋ ์์ธํ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๋๊ตฌ๋ ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด๋ GC ์๋ฐ์ ์ ๋ฐํ๋ ํน์ ํจ์๋ ์ฝ๋ ์น์ ์ ์ ํํ ์ฐพ์๋ด๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ก๊น ๋ฐ ๋ฉํธ๋ฆญ
์ ํ๋ฆฌ์ผ์ด์ ์ ๋ง์ถคํ ๋ก๊น ๋ฐ ๋ฉํธ๋ฆญ์ ์ถ๊ฐํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, ๊ฐ์ฒด ํ ๋น๋ฅ , GC ์ฃผ๊ธฐ ์๊ฐ์ ๋ํ ๊ท์คํ ๋ฐ์ดํฐ๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ด๋ ํ๋กํ์ผ๋ง ๋๊ตฌ๋ง์ผ๋ก๋ ๋ช ํํ์ง ์์ ์ ์๋ ํจํด์ด๋ ์ถ์ธ๋ฅผ ์๋ณํ๋ ๋ฐ ํนํ ์ ์ฉํ ์ ์์ต๋๋ค.
์์: ํ ๋น๋ ๊ฐ์ฒด์ ํฌ๊ธฐ๋ฅผ ๊ธฐ๋กํ๋๋ก ์ฝ๋๋ฅผ ๊ณ์ธกํ์ธ์. ๋ค์ํ ๊ฐ์ฒด ์ ํ์ ๋ํด ์ด๋น ํ ๋น ์๋ฅผ ์ถ์ ํ์ธ์. ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง ๋๊ตฌ๋ ์์ฒด ์ ์ ์์คํ ์ ์ฌ์ฉํ์ฌ ์ด ๋ฐ์ดํฐ๋ฅผ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ์๊ฐํํ์ธ์. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๋์๋ ์์์น ๋ชปํ ํ ๋น ํจํด์ ๋ฐ๊ฒฌํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ ๋๋ค.
WebAssembly GC ์ฑ๋ฅ ์ต์ ํ ์ ๋ต
์ ์ฌ์ ์ธ GC ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๋ค๋ฉด, ์ฑ๋ฅ์ ๊ฐ์ ํ๊ธฐ ์ํด ๋ค์ํ ์ ๋ต์ ์ ์ฉํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ ๋ต์ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ ์์ญ์ผ๋ก ๋ถ๋ฅํ ์ ์์ต๋๋ค.
1. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ค์ด๊ธฐ
GC ์ฑ๋ฅ์ ๊ฐ์ ํ๋ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ ๋นํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ค์ด๋ ๊ฒ์ ๋๋ค. ํ ๋น์ด ์ ์์๋ก GC์ ์์ ๋์ด ์ค์ด๋ค์ด ์ค๋จ ์๊ฐ์ด ์งง์์ง๊ณ ์ฒ๋ฆฌ๋์ด ๋์์ง๋๋ค.
- ๊ฐ์ฒด ํ๋ง(Object Pooling): ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋์ ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ฒกํฐ, ํ๋ ฌ ๋๋ ์์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฐ์ด ์์ฃผ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ ํนํ ํจ๊ณผ์ ์ผ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด ์บ์ฑ(Object Caching): ์์ฃผ ์ ๊ทผํ๋ ๊ฐ์ฒด๋ฅผ ์บ์์ ์ ์ฅํ์ฌ ๋ค์ ๊ณ์ฐํ๊ฑฐ๋ ๊ฐ์ ธ์ค๋ ๊ฒ์ ํผํฉ๋๋ค. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ์์ฑ์ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ์๋ฃ ๊ตฌ์กฐ ์ต์ ํ: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐ ํ ๋น ์ธก๋ฉด์์ ํจ์จ์ ์ธ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์ ์ผ๋ก ์ฆ๊ฐํ๋ ๋ฆฌ์คํธ ๋์ ๊ณ ์ ํฌ๊ธฐ ๋ฐฐ์ด์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ ๋จํธํ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ถ๋ณ ์๋ฃ ๊ตฌ์กฐ(Immutable Data Structures): ๋ถ๋ณ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ๊ณ ์์ ํ ํ์๊ฐ ์ค์ด๋ค์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ๊ฐ์ํ๊ณ GC ์ฑ๋ฅ์ด ํฅ์๋ ์ ์์ต๋๋ค. Immutable.js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(JavaScript์ฉ์ผ๋ก ์ค๊ณ๋์์ง๋ง ์์น์ ์ ์ฉ๋จ)๋ฅผ ์ ์ฉํ๊ฑฐ๋ ์๊ฐ์ ๋ฐ์ WASM์ผ๋ก ์ปดํ์ผ๋๋ ๋ค๋ฅธ ์ธ์ด์์ ๋ถ๋ณ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
- ์๋ ๋ ํ ๋น์(Arena Allocators): ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฐ ๋ฉ์ด๋ฆฌ(์๋ ๋)๋ก ํ ๋นํ ๋ค์, ์ด ์๋ ๋ ๋ด์์ ๊ฐ์ฒด๋ฅผ ํ ๋นํฉ๋๋ค. ์ด๋ ๋จํธํ๋ฅผ ์ค์ด๊ณ ํ ๋น ์๋๋ฅผ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์๋ ๋๊ฐ ๋ ์ด์ ํ์ํ์ง ์์ ๋, ์ ์ฒด ๋ฉ์ด๋ฆฌ๋ฅผ ํ ๋ฒ์ ํด์ ํ ์ ์์ด ๊ฐ๋ณ ๊ฐ์ฒด๋ฅผ ํด์ ํ ํ์๊ฐ ์์ต๋๋ค.
์์: ๊ฒ์ ์์ง์์ ๊ฐ ํํฐํด์ ๋ํด ๋งค ํ๋ ์๋ง๋ค ์๋ก์ด Vector3 ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๋์ , ๊ฐ์ฒด ํ์ ์ฌ์ฉํ์ฌ ๊ธฐ์กด Vector3 ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํฉ๋๋ค. ์ด๋ ํ ๋น ์๋ฅผ ํฌ๊ฒ ์ค์ด๊ณ GC ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ์ฌ์ฉ ๊ฐ๋ฅํ Vector3 ๊ฐ์ฒด ๋ชฉ๋ก์ ์ ์งํ๊ณ ํ์์ ๊ฐ์ฒด๋ฅผ ํ๋ํ๊ณ ๋ฐํํ๋ ๋ฉ์๋๋ฅผ ์ ๊ณตํ์ฌ ๊ฐ๋จํ ๊ฐ์ฒด ํ์ ๊ตฌํํ ์ ์์ต๋๋ค.
2. ๊ฐ์ฒด ์๋ช ์ต์ํ
๊ฐ์ฒด๊ฐ ์ค๋ ์ด์์์์๋ก GC์ ์ํด ์ ๋ฆฌ๋ ๊ฐ๋ฅ์ฑ์ด ๋์์ง๋๋ค. ๊ฐ์ฒด ์๋ช ์ ์ต์ํํจ์ผ๋ก์จ GC๊ฐ ํด์ผ ํ ์์ ์ ์์ ์ค์ผ ์ ์์ต๋๋ค.
- ๋ณ์ ๋ฒ์ ์ ์ ํ๊ฒ ์ง์ ํ๊ธฐ: ๊ฐ๋ฅํ ๊ฐ์ฅ ์์ ๋ฒ์์ ๋ณ์๋ฅผ ์ ์ธํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ์ด์ ํ์ํ์ง ์์ ํ์ ๋ ๋นจ๋ฆฌ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋ ์ ์์ต๋๋ค.
- ์์ ์ ์ํ๊ฒ ํด์ ํ๊ธฐ: ๊ฐ์ฒด๊ฐ ์์(์: ํ์ผ ํธ๋ค, ๋คํธ์ํฌ ์ฐ๊ฒฐ)์ ๋ณด์ ํ๊ณ ์๋ค๋ฉด, ๋ ์ด์ ํ์ํ์ง ์์ ๋ ์ฆ์ ํด๋น ์์์ ํด์ ํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๊ณ ๊ฐ์ฒด๊ฐ GC์ ์ํด ์ ๋ฆฌ๋ ๊ฐ๋ฅ์ฑ์ ์ค์ผ ์ ์์ต๋๋ค.
- ์ ์ญ ๋ณ์ ํผํ๊ธฐ: ์ ์ญ ๋ณ์๋ ์๋ช ์ด ๊ธธ์ด GC ์๋ฐ์ ๊ธฐ์ฌํ ์ ์์ต๋๋ค. ์ ์ญ ๋ณ์ ์ฌ์ฉ์ ์ต์ํํ๊ณ ์์กด์ฑ ์ฃผ์ ์ด๋ ๋ค๋ฅธ ๊ธฐ์ ์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์๋ช ์ ๊ด๋ฆฌํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
์์: ํจ์ ์๋จ์ ํฐ ๋ฐฐ์ด์ ์ ์ธํ๋ ๋์ , ์ค์ ๋ก ์ฌ์ฉ๋๋ ๋ฃจํ ๋ด๋ถ์ ์ ์ธํฉ๋๋ค. ๋ฃจํ๊ฐ ๋๋๋ฉด ๋ฐฐ์ด์ ๊ฐ๋น์ง ์ปฌ๋ ์ ๋์์ด ๋ฉ๋๋ค. ์ด๋ ๋ฐฐ์ด์ ์๋ช ์ ์ค์ด๊ณ GC ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ๋ธ๋ก ์ค์ฝํ์ ์ง์ํ๋ ์ธ์ด(์: `let`๊ณผ `const`๋ฅผ ์ฌ์ฉํ๋ JavaScript)์์๋ ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ณ์ ๋ฒ์๋ฅผ ์ ํํด์ผ ํฉ๋๋ค.
3. ์๋ฃ ๊ตฌ์กฐ ์ต์ ํ
์๋ฃ ๊ตฌ์กฐ์ ์ ํ์ GC ์ฑ๋ฅ์ ์๋นํ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฐ ํ ๋น ์ธก๋ฉด์์ ํจ์จ์ ์ธ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ ํํ์ธ์.
- ์์ ํ์ ์ฌ์ฉํ๊ธฐ: ์์ ํ์ (์: ์ ์, ๋ถ๋ฆฌ์ธ, ๋ถ๋ ์์์ )์ ์ผ๋ฐ์ ์ผ๋ก ๊ฐ์ฒด๋ณด๋ค ํจ์จ์ ์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ GC ์๋ฐ์ ์ค์ด๊ธฐ ์ํด ๊ฐ๋ฅํ ๋๋ง๋ค ์์ ํ์ ์ ์ฌ์ฉํ์ธ์.
- ๊ฐ์ฒด ์ค๋ฒํค๋ ์ต์ํํ๊ธฐ: ๊ฐ ๊ฐ์ฒด์๋ ์ผ์ ๋์ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค. ๋ ๊ฐ๋จํ ์๋ฃ ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋จ์ผ ๊ฐ์ฒด๋ก ๊ฒฐํฉํ์ฌ ๊ฐ์ฒด ์ค๋ฒํค๋๋ฅผ ์ต์ํํ์ธ์.
- ๊ตฌ์กฐ์ฒด ๋ฐ ๊ฐ ํ์ ๊ณ ๋ คํ๊ธฐ: ๊ตฌ์กฐ์ฒด๋ ๊ฐ ํ์ ์ ์ง์ํ๋ ์ธ์ด์์๋ ํด๋์ค๋ ์ฐธ์กฐ ํ์ ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ๊ตฌ์กฐ์ฒด๋ ์ผ๋ฐ์ ์ผ๋ก ์คํ์ ํ ๋น๋๋ฏ๋ก GC ์ค๋ฒํค๋๋ฅผ ํผํ ์ ์์ต๋๋ค.
- ์ปดํฉํธํ ๋ฐ์ดํฐ ํํ: ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ปดํฉํธํ ํ์์ผ๋ก ํํํ์ธ์. ์๋ฅผ ๋ค์ด, ๋ถ๋ฆฌ์ธ ํ๋๊ทธ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋นํธ ํ๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ฌธ์์ด์ ํํํ๊ธฐ ์ํด ์ ์ ์ธ์ฝ๋ฉ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
์์: ํ๋๊ทธ ์งํฉ์ ์ ์ฅํ๊ธฐ ์ํด ๋ถ๋ฆฌ์ธ ๊ฐ์ฒด ๋ฐฐ์ด์ ์ฌ์ฉํ๋ ๋์ , ๋จ์ผ ์ ์๋ฅผ ์ฌ์ฉํ๊ณ ๋นํธ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ณ ๋นํธ๋ฅผ ์กฐ์ํ์ธ์. ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ GC ์๋ฐ์ ํฌ๊ฒ ์ค์ฌ์ค๋๋ค.
4. ์ธ์ด ๊ฐ ๊ฒฝ๊ณ ์ต์ํ
์ ํ๋ฆฌ์ผ์ด์ ์ด WebAssembly์ JavaScript ๊ฐ์ ํต์ ์ ํฌํจํ๋ ๊ฒฝ์ฐ, ์ธ์ด ๊ฒฝ๊ณ๋ฅผ ๋์ด ๊ตํ๋๋ ๋ฐ์ดํฐ์ ๋น๋์ ์์ ์ต์ํํ๋ฉด ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. ์ด ๊ฒฝ๊ณ๋ฅผ ๋๋ ๊ฒ์ ์ข ์ข ๋ฐ์ดํฐ ๋ง์ฌ๋ง๊ณผ ๋ณต์ฌ๋ฅผ ํฌํจํ๋ฉฐ, ์ด๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ณผ GC ์๋ฐ ์ธก๋ฉด์์ ๋น์ฉ์ด ๋ง์ด ๋ค ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ์ ์ก ์ผ๊ด ์ฒ๋ฆฌํ๊ธฐ: ๋ฐ์ดํฐ๋ฅผ ํ ๋ฒ์ ํ๋์ฉ ์ ์กํ๋ ๋์ , ๋ ํฐ ๋ฉ์ด๋ฆฌ๋ก ์ผ๊ด ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋ ์ธ์ด ๊ฒฝ๊ณ๋ฅผ ๋๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ์ค๋ฒํค๋๋ฅผ ์ค์ฌ์ค๋๋ค.
- ํ์ ๋ฐฐ์ด ์ฌ์ฉํ๊ธฐ: WebAssembly์ JavaScript ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์กํ๊ธฐ ์ํด ํ์ ๋ฐฐ์ด(์: `Uint8Array`, `Float32Array`)์ ์ฌ์ฉํฉ๋๋ค. ํ์ ๋ฐฐ์ด์ ๋ ํ๊ฒฝ์์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ์ ์์ค์ ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค.
- ๊ฐ์ฒด ์ง๋ ฌํ/์ญ์ง๋ ฌํ ์ต์ํํ๊ธฐ: ๋ถํ์ํ ๊ฐ์ฒด ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ๋ฅผ ํผํ์ธ์. ๊ฐ๋ฅํ๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ด์ง ๋ฐ์ดํฐ๋ก ์ง์ ์ ๋ฌํ๊ฑฐ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ๋ฅผ ์ฌ์ฉํ์ธ์.
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉํ๊ธฐ: WebAssembly์ JavaScript๋ ๊ณตํต ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ ์ ์์ต๋๋ค. ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ๋ ๋ฐ์ดํฐ ๋ณต์ฌ๋ฅผ ํผํ์ธ์. ๊ทธ๋ฌ๋ ๋์์ฑ ๋ฌธ์ ์ ์ ์ํ๊ณ ์ ์ ํ ๋๊ธฐํ ๋ฉ์ปค๋์ฆ์ด ๋ง๋ จ๋์ด ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
์์: WebAssembly์์ JavaScript๋ก ํฐ ์ซ์ ๋ฐฐ์ด์ ๋ณด๋ผ ๋, ๊ฐ ์ซ์๋ฅผ JavaScript ์ซ์๋ก ๋ณํํ๋ ๋์ `Float32Array`๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ ๋ง์ JavaScript ์ซ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ฐ๋น์ง ์ปฌ๋ ์ ํ๋ ์ค๋ฒํค๋๋ฅผ ํผํ ์ ์์ต๋๋ค.
5. GC ์๊ณ ๋ฆฌ์ฆ ์ดํดํ๊ธฐ
๋ค์ํ WebAssembly ๋ฐํ์(๋ธ๋ผ์ฐ์ , WASM ์ง์ Node.js)์ ๋ค๋ฅธ GC ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋์ ๋ฐํ์์์ ์ฌ์ฉํ๋ ํน์ GC ์๊ณ ๋ฆฌ์ฆ์ ํน์ฑ์ ์ดํดํ๋ฉด ์ต์ ํ ์ ๋ต์ ๋ง์ถคํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ GC ์๊ณ ๋ฆฌ์ฆ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํ์ํ๊ณ ์ธ๊ธฐ(Mark and Sweep): ์ด์์๋ ๊ฐ์ฒด๋ฅผ ํ์ํ ๋ค์ ๋๋จธ์ง๋ฅผ ์ธ์ด๋ด๋ ๊ธฐ๋ณธ์ ์ธ GC ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋จํธํ์ ๊ธด ์ค๋จ ์๊ฐ์ ์ ๋ฐํ ์ ์์ต๋๋ค.
- ํ์ํ๊ณ ์์ถํ๊ธฐ(Mark and Compact): ํ์ํ๊ณ ์ธ๊ธฐ์ ์ ์ฌํ์ง๋ง, ๋จํธํ๋ฅผ ์ค์ด๊ธฐ ์ํด ํ์ ์์ถํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋จํธํ๋ฅผ ์ค์ผ ์ ์์ง๋ง ์ฌ์ ํ ๊ธด ์ค๋จ ์๊ฐ์ด ์์ ์ ์์ต๋๋ค.
- ์ธ๋๋ณ GC(Generational GC): ํ์ ์ธ๋๋ณ๋ก ๋๋๊ณ ์ ์ ์ธ๋๋ฅผ ๋ ์์ฃผ ์์งํฉ๋๋ค. ์ด ์๊ณ ๋ฆฌ์ฆ์ ๋๋ถ๋ถ์ ๊ฐ์ฒด๊ฐ ์งง์ ์๋ช ์ ๊ฐ๋๋ค๋ ๊ด์ฐฐ์ ๊ธฐ๋ฐํฉ๋๋ค. ์ธ๋๋ณ GC๋ ์ข ์ข ํ์ํ๊ณ ์ธ๊ธฐ๋ ํ์ํ๊ณ ์์ถํ๊ธฐ๋ณด๋ค ๋ ๋์ ์ฑ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
- ์ ์ง์ GC(Incremental GC): GC๋ฅผ ์์ ์ฆ๋ถ์ผ๋ก ์ํํ์ฌ GC ์ฃผ๊ธฐ๋ฅผ ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์คํ๊ณผ ๋ฒ๊ฐ์ ๊ฐ๋ฉฐ ์คํํฉ๋๋ค. ์ด๋ ์ค๋จ ์๊ฐ์ ์ค์ด์ง๋ง ์ ์ฒด GC ์ค๋ฒํค๋๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์์ต๋๋ค.
- ๋์์ฑ GC(Concurrent GC): ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์คํ๊ณผ ๋์์ GC๋ฅผ ์ํํฉ๋๋ค. ์ด๋ ์ค๋จ ์๊ฐ์ ํฌ๊ฒ ์ค์ผ ์ ์์ง๋ง ๋ฐ์ดํฐ ์์์ ํผํ๊ธฐ ์ํด ์ ์คํ ๋๊ธฐํ๊ฐ ํ์ํฉ๋๋ค.
๋์ WebAssembly ๋ฐํ์์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ฌ ์ด๋ค GC ์๊ณ ๋ฆฌ์ฆ์ด ์ฌ์ฉ๋๊ณ ์๋์ง, ๊ทธ๋ฆฌ๊ณ ์ด๋ป๊ฒ ๊ตฌ์ฑํ๋์ง ํ์ธํ์ธ์. ์ผ๋ถ ๋ฐํ์์ ํ ํฌ๊ธฐ๋ GC ์ฃผ๊ธฐ ๋น๋์ ๊ฐ์ GC ๋งค๊ฐ๋ณ์๋ฅผ ์กฐ์ ํ๋ ์ต์ ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
6. ์ปดํ์ผ๋ฌ ๋ฐ ์ธ์ด๋ณ ์ต์ ํ
WebAssembly๋ฅผ ๋์์ผ๋ก ์ฌ์ฉํ๋ ํน์ ์ปดํ์ผ๋ฌ์ ์ธ์ด๋ GC ์ฑ๋ฅ์ ์ํฅ์ ๋ฏธ์น ์ ์์ต๋๋ค. ํน์ ์ปดํ์ผ๋ฌ์ ์ธ์ด๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ฐ์ ํ๊ณ GC ์๋ฐ์ ์ค์ผ ์ ์๋ ๋ด์ฅ ์ต์ ํ๋ ์ธ์ด ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
- AssemblyScript: AssemblyScript๋ WebAssembly๋ก ์ง์ ์ปดํ์ผ๋๋ TypeScript์ ์ ์ฌํ ์ธ์ด์ ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ์ ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํ๋ฉฐ ์ ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ง์ํ์ฌ GC ์ฑ๋ฅ ์ต์ ํ์ ์ ์ฉํ ์ ์์ต๋๋ค. AssemblyScript๋ ์ด์ ํ์ค ์ ์์ ํตํด GC๋ฅผ ์ง์ํ์ง๋ง, ์ ํ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ์ต์ ํ ๋ฐฉ๋ฒ์ ์ดํดํ๋ ๊ฒ์ ์ฌ์ ํ ๋์์ด ๋ฉ๋๋ค.
- TinyGo: TinyGo๋ ์๋ฒ ๋๋ ์์คํ ๊ณผ WebAssembly๋ฅผ ์ํด ํน๋ณํ ์ค๊ณ๋ Go ์ปดํ์ผ๋ฌ์ ๋๋ค. ์์ ๋ฐ์ด๋๋ฆฌ ํฌ๊ธฐ์ ํจ์จ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํ์ฌ ์์์ด ์ ํ๋ ํ๊ฒฝ์ ์ ํฉํฉ๋๋ค. TinyGo๋ GC๋ฅผ ์ง์ํ์ง๋ง, GC๋ฅผ ๋นํ์ฑํํ๊ณ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค.
- Emscripten: Emscripten์ C ๋ฐ C++ ์ฝ๋๋ฅผ WebAssembly๋ก ์ปดํ์ผํ ์ ์๊ฒ ํด์ฃผ๋ ํด์ฒด์ธ์ ๋๋ค. ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ์๋ฎฌ๋ ์ดํธ๋ GC, ๋ค์ดํฐ๋ธ GC ์ง์ ๋ฑ ๋ค์ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ต์ ์ ์ ๊ณตํฉ๋๋ค. Emscripten์ ๋ง์ถคํ ํ ๋น์ ์ง์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจํด ์ต์ ํ์ ๋์์ด ๋ ์ ์์ต๋๋ค.
- Rust (WASM ์ปดํ์ผ์ ํตํด): Rust๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ์์ด ๋ฉ๋ชจ๋ฆฌ ์์ ์ฑ์ ์ค์ ์ ๋ก๋๋ค. ์์ ๊ถ ๋ฐ ๋์ฌ ์์คํ ์ ์ปดํ์ผ ์๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ๋์์ ๋๊ธ๋ง ํฌ์ธํฐ๋ฅผ ๋ฐฉ์งํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ์ ๋ํ ์ธ๋ฐํ ์ ์ด๋ฅผ ์ ๊ณตํฉ๋๋ค. ๊ทธ๋ฌ๋ Rust์ WASM GC ์ง์์ ์์ง ๋ฐ์ ์ค์ด๋ฉฐ, ๋ค๋ฅธ GC ๊ธฐ๋ฐ ์ธ์ด์์ ์ํธ ์ด์ฉ์ฑ์ ์ํด์๋ ๋ธ๋ฆฌ์ง๋ ์ค๊ฐ ํํ์ ์ฌ์ฉํด์ผ ํ ์ ์์ต๋๋ค.
์์: AssemblyScript๋ฅผ ์ฌ์ฉํ ๋, ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ์ฝ๋์ ์ฑ๋ฅ์ด ์ค์ํ ๋ถ๋ถ์ ๋ํด ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํ์ธ์. ์ด๋ GC๋ฅผ ์ฐํํ๊ณ ๋ ์์ธก ๊ฐ๋ฅํ ์ฑ๋ฅ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ํผํ๊ธฐ ์ํด ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ฌ๋ก๋ฅผ ์ ์ ํ๊ฒ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
7. ์ฝ๋ ๋ถํ ๋ฐ ์ง์ฐ ๋ก๋ฉ
์ ํ๋ฆฌ์ผ์ด์ ์ด ํฌ๊ณ ๋ณต์กํ๋ค๋ฉด, ๋ ์์ ๋ชจ๋๋ก ๋ถํ ํ๊ณ ํ์์ ๋ฐ๋ผ ๋ก๋ํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์. ์ด๋ ์ด๊ธฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ ์์ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค. ์ค์ํ์ง ์์ ๋ชจ๋์ ๋ก๋ฉ์ ์ง์ฐ์ํด์ผ๋ก์จ, ์์ ์ GC๊ฐ ๊ด๋ฆฌํด์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ค์ผ ์ ์์ต๋๋ค.
์์: ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ฝ๋๋ฅผ ๋ค๋ฅธ ๊ธฐ๋ฅ(์: ๋ ๋๋ง, UI, ๊ฒ์ ๋ก์ง)์ ๋ด๋นํ๋ ๋ชจ๋๋ก ๋ถํ ํ์ธ์. ์ด๊ธฐ ๋ทฐ์ ํ์ํ ๋ชจ๋๋ง ๋ก๋ํ ๋ค์, ์ฌ์ฉ์๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ ์์ฉํจ์ ๋ฐ๋ผ ๋ค๋ฅธ ๋ชจ๋์ ๋ก๋ํ์ธ์. ์ด ์ ๊ทผ ๋ฐฉ์์ React, Angular, Vue.js์ ๊ฐ์ ์ต์ ์น ํ๋ ์์ํฌ ๋ฐ ๊ทธ๋ค์ WASM ๋์๋ฌผ์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
8. ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ณ ๋ คํ๊ธฐ (์ฃผ์)
WASM GC์ ๋ชฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๋จ์ํํ๋ ๊ฒ์ด์ง๋ง, ํน์ ์ฑ๋ฅ์ด ์ค์ํ ์๋๋ฆฌ์ค์์๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ก ๋์๊ฐ๋ ๊ฒ์ด ํ์ํ ์ ์์ต๋๋ค. ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ์ ๋ํ ์ต๋ํ์ ์ ์ด๋ฅผ ์ ๊ณตํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ ๋์, ๋๊ธ๋ง ํฌ์ธํฐ ๋ฐ ๊ธฐํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฒ๊ทธ์ ์ํ๋ ๋๋ฐํฉ๋๋ค.
์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ณ ๋ คํด์ผ ํ ๋:
- ๊ทน๋๋ก ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ์ฝ๋: ์ฝ๋์ ํน์ ๋ถ๋ถ์ด ๊ทน๋๋ก ์ฑ๋ฅ์ ๋ฏผ๊ฐํ๊ณ GC ์ค๋จ์ด ํ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ, ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํ ์ฑ๋ฅ์ ๋ฌ์ฑํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ผ ์ ์์ต๋๋ค.
- ๊ฒฐ์ ๋ก ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ธ์ ํ ๋น๋๊ณ ํด์ ๋๋์ง์ ๋ํ ์ ๋ฐํ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ, ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ํ์ํ ์ ์ด๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
- ์์์ด ์ ํ๋ ํ๊ฒฝ: ์์์ด ์ ํ๋ ํ๊ฒฝ(์: ์๋ฒ ๋๋ ์์คํ )์์๋ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ์ค์ด๊ณ ์ ๋ฐ์ ์ธ ์์คํ ์ฑ๋ฅ์ ํฅ์์ํค๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๊ตฌํ ๋ฐฉ๋ฒ:
- ์ ํ ๋ฉ๋ชจ๋ฆฌ: WebAssembly์ ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ํด์ ํฉ๋๋ค. ์ ํ ๋ฉ๋ชจ๋ฆฌ๋ WebAssembly ์ฝ๋๊ฐ ์ง์ ์ ๊ทผํ ์ ์๋ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ๋๋ค.
- ๋ง์ถคํ ํ ๋น์: ์ ํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๋ด์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ง์ถคํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์๋ฅผ ๊ตฌํํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ ํด์ ๋๋ ๋ฐฉ์์ ์ ์ดํ๊ณ ํน์ ํ ๋น ํจํด์ ๋ง๊ฒ ์ต์ ํํ ์ ์์ต๋๋ค.
- ์ฃผ์ ๊น์ ์ถ์ : ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฃผ์ ๊น๊ฒ ์ถ์ ํ๊ณ ๋ชจ๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ฒฐ๊ตญ ํด์ ๋๋๋ก ํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
- ๋๊ธ๋ง ํฌ์ธํฐ ํผํ๊ธฐ: ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋ ํ์๋ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ์ง ์๋๋ก ํฉ๋๋ค. ๋๊ธ๋ง ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ์๋์ง ์์ ๋์๊ณผ ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์์: ์ค์๊ฐ ์ค๋์ค ์ฒ๋ฆฌ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ค๋์ค ๋ฒํผ๋ฅผ ํ ๋นํ๊ณ ํด์ ํฉ๋๋ค. ์ด๋ ์ค๋์ค ์คํธ๋ฆผ์ ๋ฐฉํดํ๊ณ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํดํ ์ ์๋ GC ์ค๋จ์ ํผํ ์ ์์ต๋๋ค. ๋น ๋ฅด๊ณ ๊ฒฐ์ ๋ก ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋ฐ ํด์ ๋ฅผ ์ ๊ณตํ๋ ๋ง์ถคํ ํ ๋น์๋ฅผ ๊ตฌํํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ์ถ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๊ฐ์งํ๊ณ ๋ฐฉ์งํฉ๋๋ค.
์ค์ ๊ณ ๋ ค ์ฌํญ: ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ ๊ทน๋์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ ์ ๊ทผํด์ผ ํฉ๋๋ค. ์ด๋ ์ฝ๋์ ๋ณต์ก์ฑ์ ํฌ๊ฒ ์ฆ๊ฐ์ํค๊ณ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ๋ฒ๊ทธ์ ์ํ์ ์ด๋ํฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์น์ ๋ํ ์ฒ ์ ํ ์ดํด๊ฐ ์๊ณ ์ด๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌํํ๋ ๋ฐ ํ์ํ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ ํฌ์ํ ์ํฅ์ด ์๋ ๊ฒฝ์ฐ์๋ง ์๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ๊ณ ๋ คํ์ธ์.
์ฌ๋ก ์ฐ๊ตฌ ๋ฐ ์์
์ด๋ฌํ ์ต์ ํ ์ ๋ต์ ์ค์ ์ ์ฉ์ ์ค๋ช ํ๊ธฐ ์ํด ๋ช ๊ฐ์ง ์ฌ๋ก ์ฐ๊ตฌ์ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฌ๋ก ์ฐ๊ตฌ 1: WebAssembly ๊ฒ์ ์์ง ์ต์ ํ
WebAssembly์ GC๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ๋ ๊ฒ์ ์์ง์ ๋น๋ฒํ GC ์ค๋จ์ผ๋ก ์ธํด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฒช์์ต๋๋ค. ํ๋กํ์ผ๋ง ๊ฒฐ๊ณผ, ์์ง์ ๋ฒกํฐ, ํ๋ ฌ, ์ถฉ๋ ๋ฐ์ดํฐ์ ๊ฐ์ ์๋ง์ ์์ ๊ฐ์ฒด๋ฅผ ๋งค ํ๋ ์๋ง๋ค ํ ๋นํ๊ณ ์์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ต์ ํ ์ ๋ต์ด ๊ตฌํ๋์์ต๋๋ค:
- ๊ฐ์ฒด ํ๋ง: ๋ฒกํฐ, ํ๋ ฌ, ์ถฉ๋ ๋ฐ์ดํฐ์ ๊ฐ์ด ์์ฃผ ์ฌ์ฉ๋๋ ๊ฐ์ฒด์ ๋ํด ๊ฐ์ฒด ํ์ด ๊ตฌํ๋์์ต๋๋ค.
- ์๋ฃ ๊ตฌ์กฐ ์ต์ ํ: ๊ฒ์ ๊ฐ์ฒด์ ์ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ๋ ํจ์จ์ ์ธ ์๋ฃ ๊ตฌ์กฐ๊ฐ ์ฌ์ฉ๋์์ต๋๋ค.
- ์ธ์ด ๊ฐ ๊ฒฝ๊ณ ์ถ์: ๋ฐ์ดํฐ๋ฅผ ์ผ๊ด ์ฒ๋ฆฌํ๊ณ ํ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ WebAssembly์ JavaScript ๊ฐ์ ๋ฐ์ดํฐ ์ ์ก์ด ์ต์ํ๋์์ต๋๋ค.
์ด๋ฌํ ์ต์ ํ์ ๊ฒฐ๊ณผ๋ก GC ์ค๋จ ์๊ฐ์ด ํฌ๊ฒ ์ค์ด๋ค์๊ณ ๊ฒ์ ์์ง์ ํ๋ ์ ์๋๊ฐ ๊ทน์ ์ผ๋ก ํฅ์๋์์ต๋๋ค.
์ฌ๋ก ์ฐ๊ตฌ 2: WebAssembly ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ต์ ํ
WebAssembly์ GC๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐ๋ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฏธ์ง ํํฐ๋ง ์์ ์ค ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ผ๋ก ์ธํด ์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฒช์์ต๋๋ค. ํ๋กํ์ผ๋ง ๊ฒฐ๊ณผ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ ํํฐ๋ง ๋จ๊ณ๋ง๋ค ์๋ก์ด ์ด๋ฏธ์ง ๋ฒํผ๋ฅผ ์์ฑํ๊ณ ์์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ต์ ํ ์ ๋ต์ด ๊ตฌํ๋์์ต๋๋ค:
- ์ธํ๋ ์ด์ค(In-Place) ์ด๋ฏธ์ง ์ฒ๋ฆฌ: ์ด๋ฏธ์ง ํํฐ๋ง ์์ ์ด ์๋ก์ด ๋ฒํผ๋ฅผ ์์ฑํ๋ ๋์ ์๋ณธ ์ด๋ฏธ์ง ๋ฒํผ๋ฅผ ์์ ํ๋๋ก ์์ ๋์์ต๋๋ค.
- ์๋ ๋ ํ ๋น์: ์ด๋ฏธ์ง ์ฒ๋ฆฌ ์์ ์ ์ํ ์์ ๋ฒํผ๋ฅผ ํ ๋นํ๊ธฐ ์ํด ์๋ ๋ ํ ๋น์๊ฐ ์ฌ์ฉ๋์์ต๋๋ค.
- ์๋ฃ ๊ตฌ์กฐ ์ต์ ํ: ์ด๋ฏธ์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ปดํฉํธํ ๋ฐ์ดํฐ ํํ์ด ์ฌ์ฉ๋์ด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ค์์ต๋๋ค.
์ด๋ฌํ ์ต์ ํ์ ๊ฒฐ๊ณผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ํฌ๊ฒ ์ค์ด๋ค์๊ณ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฑ๋ฅ์ด ๊ทน์ ์ผ๋ก ํฅ์๋์์ต๋๋ค.
WebAssembly GC ์ฑ๋ฅ ํ๋์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์์์ ๋ ผ์๋ ์ ๋ต๊ณผ ๊ธฐ์ ์ธ์๋, WebAssembly GC ์ฑ๋ฅ ํ๋์ ์ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ ๊ธฐ์ ์ธ ํ๋กํ์ผ๋ง: ์ ์ฌ์ ์ธ GC ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์๋ณํ๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๋กํ์ผ๋งํ์ธ์.
- ์ฑ๋ฅ ์ธก์ : ์ต์ ํ ์ ๋ต์ด ์ค์ ๋ก ์ฑ๋ฅ์ ํฅ์์ํค๋์ง ํ์ธํ๊ธฐ ์ํด ์ ์ฉ ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ์ ์ธก์ ํ์ธ์.
- ๋ฐ๋ณต ๋ฐ ๊ฐ์ : ์ต์ ํ๋ ๋ฐ๋ณต์ ์ธ ๊ณผ์ ์ ๋๋ค. ๋ค์ํ ์ต์ ํ ์ ๋ต์ ์คํํ๊ณ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ์ ํ์ธ์.
- ์ต์ ์ ๋ณด ์ ์ง: WebAssembly GC ๋ฐ ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ์ ์ต์ ๊ฐ๋ฐ ๋ํฅ์ ํ์ ํ์ธ์. ์๋ก์ด ๊ธฐ๋ฅ๊ณผ ์ต์ ํ๊ฐ WebAssembly ๋ฐํ์๊ณผ ๋ธ๋ผ์ฐ์ ์ ์ง์์ ์ผ๋ก ์ถ๊ฐ๋๊ณ ์์ต๋๋ค.
- ๋ฌธ์ ์ฐธ์กฐ: GC ์ต์ ํ์ ๋ํ ๊ตฌ์ฒด์ ์ธ ์ง์นจ์ ๋์ WebAssembly ๋ฐํ์ ๋ฐ ์ปดํ์ผ๋ฌ์ ๋ฌธ์๋ฅผ ์ฐธ์กฐํ์ธ์.
- ์ฌ๋ฌ ํ๋ซํผ์์ ํ ์คํธ: ๋ค์ํ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ ์๋ํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฌ๋ฌ ํ๋ซํผ๊ณผ ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธํ์ธ์. GC ๊ตฌํ ๋ฐ ์ฑ๋ฅ ํน์ฑ์ ๋ฐํ์๋ง๋ค ๋ค๋ฅผ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
WebAssembly GC๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ๊ฐ๋ ฅํ๊ณ ํธ๋ฆฌํ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. GC์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ ์ด ๊ธ์์ ๋ ผ์๋ ์ต์ ํ ์ ๋ต์ ์ ์ฉํจ์ผ๋ก์จ, ๋ฐ์ด๋ ์ฑ๋ฅ์ ๋ฌ์ฑํ๊ณ ๋ณต์กํ๊ณ ๊ณ ์ฑ๋ฅ์ WebAssembly ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. ์ต์์ ๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ์ฝ๋๋ฅผ ์ ๊ธฐ์ ์ผ๋ก ํ๋กํ์ผ๋งํ๊ณ , ์ฑ๋ฅ์ ์ธก์ ํ๋ฉฐ, ์ต์ ํ ์ ๋ต์ ๋ฐ๋ณต์ ์ผ๋ก ๊ฐ์ ํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. WebAssembly๊ฐ ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ ์๋ก์ด GC ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ต์ ํ ๊ธฐ์ ์ด ๋ฑ์ฅํ ๊ฒ์ด๋ฏ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ์ ์งํ ์ ์๋๋ก ์ต์ ๊ฐ๋ฐ ๋ํฅ์ ํ์ ํ์ธ์. WebAssembly GC์ ํ์ ํ์ฉํ์ฌ ์น ๊ฐ๋ฐ์ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด๊ณ ํ์ํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ์ธ์.